import { createSlice, PayloadAction } from '@reduxjs/toolkit'
import { produce } from 'immer'

export type PageInfoPropsType = {
  // 页面标题
  title: string
  // 页面描述
  description?: string
  // 是否发布
  publish: boolean
  // 是否标星
  star: boolean
  // JS代码
  jsCode?: string
  // CSS代码
  cssCode?: string
}

// 默认值
export const pageInfoDefaultProps: PageInfoPropsType = {
  title: '问卷标题',
  description: '问卷描述',
  jsCode: '',
  cssCode: '',
  publish: false,
  star: false
}

const usePagesInfoSlice = createSlice({
  name: 'pageInfo',
  initialState: pageInfoDefaultProps,
  reducers: {
    /**
     * 重置页面信息的函数
     *
     * 此函数用于接收一个状态对象和一个带有有效载荷的动作对象，并返回该有效载荷作为新的状态
     * 它通常用于Redux或类似的状态管理库中，以更新状态树中的页面信息
     *
     * @param state 当前的页面信息状态，这是一个具有指定属性的类型对象
     * @param action 一个包含新页面信息作为有效载荷的动作对象
     * @returns 返回新的页面信息状态，直接使用action.payload替换原有的state
     */
    resertPageInfo(state: PageInfoPropsType, action: PayloadAction<PageInfoPropsType>) {
      return action.payload
    },

    // 修改标题
    changeTitle: produce((draft: PageInfoPropsType, action: PayloadAction<string>) => {
      draft.title = action.payload
    })
  }
})

export const { resertPageInfo, changeTitle } = usePagesInfoSlice.actions

export default usePagesInfoSlice.reducer
